package com.nbufe.service;

import com.nbufe.domain.ResponseResult;
import com.nbufe.domain.dto.data.YearMonthRangeDto;
import com.nbufe.domain.entity.EmissionOrigin;
import com.nbufe.domain.vo.data.MonthRangeVo;
import com.nbufe.domain.vo.data.StageVo;
import com.nbufe.domain.vo.data.YearRangeVo;

import java.util.List;
import java.util.Map;

/**
 * @author luzhiheng
 * @date 2023/4/7
 */
public interface DataService {

    Map<String, Object> listYearVaryMaterialOneTo12CO2(Integer year, Integer stage);

    /**
     * 查询各阶段CO2总排放量
     *
     * @return
     */
    Map<String, Double> queryTotalStageCO2();

    /**
     * 获取所有年份
     *
     * @return
     */
    ResponseResult getAllYears();

    ResponseResult getProportionStage();

    Double queryTotalCO2();

    /**
     * 获取所有生产阶段
     *
     * @return
     */
    List<StageVo> listStage();

    ResponseResult queryYearVaryMaterial1To12CO2(Integer year, Integer stage);

    /**
     * 查询指定生产阶段的能源材料id
     *
     * @param stage
     * @return
     */
    List<Long> queryTargetStageMaterialIds(int stage);

    /**
     * 查询指定生产阶段的能源材料详细数据
     *
     * @param stage
     * @return
     */
    List<EmissionOrigin> queryTargetStageEmissionOrigin(int stage);

    /**
     * 获取指定年各阶段总碳排放量
     *
     * @return
     */
    Map<String, Double> queryTotalStageYearCO2(Integer year);

    /**
     * 根据年月范围计算各阶段总碳排放量
     *
     * @param dto
     * @return
     */
    List<List<MonthRangeVo>> queryStageMonthRangeCO2(YearMonthRangeDto dto);

    /**
     * 根据年月范围计算年总碳排放量
     *
     * @param dto
     * @return
     */
    List<YearRangeVo> queryYearRangeTotalCO2(YearMonthRangeDto dto);

    /**
     * 根据能源id获取指定工序
     * @param id
     * @return
     */
    ResponseResult queryProcessByEmissionOrigin(Long id);

    /**
     * 查询所有工序碳排放
     * @param year
     * @return
     */
    ResponseResult queryAllProcessEmissionOrigin(Integer year);

    /**
     * 查询近一个月的碳排放量
     * @return
     */
    ResponseResult queryEmissionMonth();

    /**
     * 查询当年碳排放总量
     * @return
     */
    Double curYearEmission();

    /**
     * 查询近12月碳排放量
     * @return
     */
    ResponseResult query12MonthEmission();
}
